/**
 * AI建议偏好管理工具
 * 负责管理用户的AI建议相关偏好设置
 */

export interface AIPreferences {
  // 基础设置
  enabled: boolean // AI建议总开关
  autoLoad: boolean // 是否自动加载建议
  showOnHomepage: boolean // 是否在首页显示
  
  // 显示模式
  mode: 'manual' | 'auto' | 'smart' // 触发模式
  frequency: 'always' | 'daily' | 'weekly' | 'never' // 显示频率
  
  // 状态记录
  lastShown: string // 最后显示时间
  lastDismissed: string // 最后关闭时间
  dismissedCount: number // 关闭次数
  acceptedCount: number // 接受次数
  
  // 首次使用
  isFirstTime: boolean // 是否首次使用
  hasSeenIntro: boolean // 是否已看过介绍
}

// 默认偏好设置
export const defaultAIPreferences: AIPreferences = {
  enabled: false, // 默认关闭，需要用户主动开启
  autoLoad: false, // 默认不自动加载
  showOnHomepage: false, // 默认不在首页显示
  mode: 'manual', // 默认手动模式
  frequency: 'daily', // 默认每日
  lastShown: '',
  lastDismissed: '',
  dismissedCount: 0,
  acceptedCount: 0,
  isFirstTime: true,
  hasSeenIntro: false
}

// 存储键名
const AI_PREFERENCES_KEY = 'aide_ai_preferences'
const AI_PREFERENCES_VERSION = '1.0'

/**
 * 获取AI偏好设置
 */
export const getAIPreferences = (): AIPreferences => {
  try {
    const stored = localStorage.getItem(AI_PREFERENCES_KEY)
    if (stored) {
      const parsed = JSON.parse(stored)
      
      // 检查版本兼容性
      if (parsed.version !== AI_PREFERENCES_VERSION) {
        console.log('AI偏好设置版本不匹配，使用默认设置')
        return { ...defaultAIPreferences }
      }
      
      // 合并默认设置，确保新字段存在
      return {
        ...defaultAIPreferences,
        ...parsed.preferences
      }
    }
  } catch (error) {
    console.warn('读取AI偏好设置失败:', error)
  }
  
  return { ...defaultAIPreferences }
}

/**
 * 保存AI偏好设置
 */
export const saveAIPreferences = (preferences: Partial<AIPreferences>): void => {
  try {
    const current = getAIPreferences()
    const updated = { ...current, ...preferences }
    
    const dataToStore = {
      version: AI_PREFERENCES_VERSION,
      updatedAt: new Date().toISOString(),
      preferences: updated
    }
    
    localStorage.setItem(AI_PREFERENCES_KEY, JSON.stringify(dataToStore))
    console.log('AI偏好设置已保存:', updated)
  } catch (error) {
    console.error('保存AI偏好设置失败:', error)
  }
}

/**
 * 重置AI偏好设置
 */
export const resetAIPreferences = (): void => {
  try {
    localStorage.removeItem(AI_PREFERENCES_KEY)
    console.log('AI偏好设置已重置')
  } catch (error) {
    console.error('重置AI偏好设置失败:', error)
  }
}

/**
 * 判断是否应该显示AI建议
 */
export const shouldShowAISuggestions = (): boolean => {
  const preferences = getAIPreferences()
  
  // 如果总开关关闭，不显示
  if (!preferences.enabled) {
    return false
  }
  
  // 如果首页显示开关关闭，不显示
  if (!preferences.showOnHomepage) {
    return false
  }
  
  // 如果是手动模式，不自动显示
  if (preferences.mode === 'manual') {
    return false
  }
  
  // 如果频率设置为never，不显示
  if (preferences.frequency === 'never') {
    return false
  }
  
  // 检查频率限制
  if (preferences.frequency !== 'always' && preferences.lastShown) {
    const lastShown = new Date(preferences.lastShown)
    const now = new Date()
    const timeDiff = now.getTime() - lastShown.getTime()
    
    switch (preferences.frequency) {
      case 'daily':
        if (timeDiff < 24 * 60 * 60 * 1000) { // 24小时内
          return false
        }
        break
      case 'weekly':
        if (timeDiff < 7 * 24 * 60 * 60 * 1000) { // 7天内
          return false
        }
        break
    }
  }
  
  return true
}

/**
 * 判断是否应该自动加载AI建议
 */
export const shouldAutoLoadSuggestions = (): boolean => {
  const preferences = getAIPreferences()
  return preferences.enabled && preferences.autoLoad && shouldShowAISuggestions()
}

/**
 * 记录AI建议显示
 */
export const recordAISuggestionShown = (): void => {
  saveAIPreferences({
    lastShown: new Date().toISOString(),
    isFirstTime: false
  })
}

/**
 * 记录AI建议关闭
 */
export const recordAISuggestionDismissed = (): void => {
  const preferences = getAIPreferences()
  saveAIPreferences({
    lastDismissed: new Date().toISOString(),
    dismissedCount: preferences.dismissedCount + 1
  })
}

/**
 * 记录AI建议接受
 */
export const recordAISuggestionAccepted = (): void => {
  const preferences = getAIPreferences()
  saveAIPreferences({
    acceptedCount: preferences.acceptedCount + 1
  })
}

/**
 * 切换AI建议开关
 */
export const toggleAISuggestions = (enabled?: boolean): boolean => {
  const preferences = getAIPreferences()
  const newEnabled = enabled !== undefined ? enabled : !preferences.enabled
  
  saveAIPreferences({
    enabled: newEnabled,
    showOnHomepage: newEnabled, // 同时控制首页显示
    lastDismissed: newEnabled ? '' : new Date().toISOString()
  })
  
  return newEnabled
}

/**
 * 智能判断新用户引导
 */
export const shouldShowIntroduction = (): boolean => {
  const preferences = getAIPreferences()
  return preferences.isFirstTime && !preferences.hasSeenIntro
}

/**
 * 标记已看过介绍
 */
export const markIntroductionSeen = (): void => {
  saveAIPreferences({
    hasSeenIntro: true
  })
}
